﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Mvc;
using System.Web;
using ProyectoAlmacen.Persistencia;
using ProyectoAlmacen.Models;
using ProyectoAlmacen.Persistencia.NH;
using System.Messaging;

namespace ProyectoAlmacen.Negocio
{
    public class ProveedorServiceImpl : IProveedorService
    {
        #region Dependencias
        public string validacionProveedor = "";
        IProveedorDAO proveedorDAO = new ProveedorDAO();

        #endregion

        #region Operaciones del Negocio

        public Proveedor CrearProveedor(int idProveedor, string RucDni, string NombreRazon, int Estado, int idUsuario)
        {
            Proveedor proveedorACrear = new Proveedor();
            proveedorACrear.idProveedor = idProveedor;
            proveedorACrear.RucDni = RucDni;
            proveedorACrear.NombreRazon = NombreRazon;
            proveedorACrear.Estado = Estado;
            proveedorACrear.idUsuario = idUsuario;
            return proveedorDAO.Crear(proveedorACrear);

        }

        public Proveedor EditarProveedor(int idProveedor, string RucDni, string NombreRazon, int Estado, int idUsuario)
        {
            Proveedor proveedorAEditar = new Proveedor();
            proveedorAEditar.idProveedor = idProveedor;
            proveedorAEditar.RucDni = RucDni;
            proveedorAEditar.NombreRazon = NombreRazon;
            proveedorAEditar.Estado = Estado;
            proveedorAEditar.idUsuario = idUsuario;

            return proveedorDAO.Modificar(proveedorAEditar);

        }

        public void EliminarProveedor(Proveedor proveedor)
        {

            proveedorDAO.Eliminar(proveedor);

        }

        #endregion

        #region Métodos de soporte para entidad proveedor
        public Proveedor ObtenerProveedor(int codigo)
        {

            return proveedorDAO.Obtener(codigo);

        }

        public ICollection<Proveedor> ListarProveedor()
        {

            string rutaCola = @".\private$\jvasquez";
            if (MessageQueue.Exists(rutaCola))
            {
                
                MessageQueue cola = new MessageQueue(rutaCola);
                Message mensaje = new Message();
                cola.Formatter = new XmlMessageFormatter(new Type[] { typeof(Proveedor) });
                Message[] msgs = cola.GetAllMessages();
                if (msgs.Length > 0)
                {


                    foreach (Message msg in msgs)
                    {
                        if (msg.Label == "Insert Proveedor")
                        {
                            Proveedor proveedor = (Proveedor)msg.Body;
                            CrearProveedor(proveedor.idProveedor, proveedor.RucDni, proveedor.NombreRazon, proveedor.Estado, proveedor.idUsuario);
                                                        
                        }
                        else if (msg.Label == "Delete Proveedor")
                        {
                            Proveedor proveedor = (Proveedor)msg.Body;
                            EliminarProveedor(proveedor);
                        }
                        else if (msg.Label == "Update Proveedor")
                        {
                            Proveedor proveedor = (Proveedor)msg.Body;
                            EditarProveedor(proveedor.idProveedor, proveedor.RucDni, proveedor.NombreRazon, proveedor.Estado, proveedor.idUsuario);

                        }



                    }
                    cola.Receive();
                
                
                
                }

                
            }

            return proveedorDAO.ListarTodos();

        }
        #endregion
    }
}